home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Just Call Me Internet
/
Just Call Me Internet.iso
/
prog
/
atari
/
m2
/
cat3src
/
magic
/
d
/
mtxobjec.d
< prev
next >
Wrap
Text File
|
1997-10-26
|
7KB
|
135 lines
(*----------------------------------------------------------------------*
* *
* MAGICTOOLS Modula's All purpose GEM Interface Cadre Toolbox *
* ÿ ÿ ÿ ÿ ÿ *
*----------------------------------------------------------------------*
* Version 3.30 02.02.1992 (C)90/91/92 by Peter Hellinger Software *
*----------------------------------------------------------------------*
* Dieses Modul ist urheberrechtlich geschtzt. *
* *
* Die Verffentlichung des Quelltextes oder Teilen daraus, sowie die *
* Verbreitung des bersetzten, nicht gelinkten Codes in schriftlicher, *
* oder maschinenlesbarer Form, insbesondere in Zeitschriften, Mail- *
* boxen oder anderen Medien bedarf der ausdrcklichen schriftlichen *
* Einverstndnisserklrung des Autors. *
* *
* Die Verbreitung des Moduls als Teil eines gelinkten Programms ist *
* fr Lizenznehmer ausdrcklich erlaubt! Der Autor behlt sich das *
* Recht vor, diese Erlaubnis jederzeit und ohne Angaben von Grnden zu *
* widerrufen. *
*----------------------------------------------------------------------*)
(*----------------------------------------------------------------------*
* ACHTUNG: _Richtige_ USerdef-Objekte (mit Behandlung durch das AES) *
* funktionieren derzeit nur mit MEGAMAX MODULA-2!!! *
*----------------------------------------------------------------------*
* Dieses Modul implementiert die einfache Handhabung von Userdef- bzw. *
* Progdef-Objekten in einem Objektbaum. Die Zeichenprozeduren brauchen *
* sich um die Details (Registerbelegung, Rckgabe etc.) nicht kmmern. *
* Diese Aufgabe bernimmt ein Handler, der intern im Modul arbeitet. *
*----------------------------------------------------------------------*)
DEFINITION MODULE mtXobjects;
FROM SYSTEM IMPORT ADDRESS;
FROM MagicSys IMPORT Nil, Null, Bit0, Bit1, Bit2, Bit3, Bit4, Bit5, Bit6,
Bit7, Bit8, Bit9, Bit10, Bit11, Bit12, Bit13, Bit14,
Bit15, LOC, Byte, ByteSet, sWORD, sINTEGER, sCARDINAL,
sBITSET, lINTEGER, lCARDINAL, lWORD, lBITSET;
FROM MagicAES IMPORT PtrPARMBLK;
TYPE DrawProc = PROCEDURE ((* para *) PtrPARMBLK): sBITSET;
(* Eine Prozedur dieses Typs ist fr die Darstellung eines Objekts voll
* eigenverantwortlich. Die Prozedur kann tun was sie will, ausser das
* AES aufrufen. Das ist STRENG VERBOTEN, da das AES nicht reentrant ist.
* (Zuwiderhandlung wird mit Bomben nicht unter 4 Stck bestraft!),
*
* TYPE PtrPARMBLK = POINTER TO PARMBLK;
* PARMBLK = RECORD
* pbTree: ADDRESS; (* Adresse des Objektbaums *)
* pbObj: sINTEGER; (* Nummer des Objekts *)
* prPrevstate: sBITSET; (* Status vor dem Aufruf *)
* prCurrstate: sBITSET; (* Neuer Status *)
* pbX: sINTEGER; (* X-Position des Objekts *)
* pbY: sINTEGER; (* Y-Position des Objekts *)
* pbW: sINTEGER; (* Breite des Objekts *)
* pbH: sINTEGER; (* Hhe des Objekts *)
* pbXc: sINTEGER; (* X-Pos des Clip-Rechtecks *)
* pbYc: sINTEGER; (* Y-Pos des Clip-Rechtecks *)
* pbWc: sINTEGER; (* Breite des Clip-Rechtecks *)
* pbHc: sINTEGER; (* Hhe des Clip-Rechtecks *)
* pbParm: ADDRESS; (* Objcspec des Objekts *)
* END;
*
* Fr Megamax-Modula-2:
* Die Prozedur wird nicht direkt vom AES angesprungen, sondern ber einen
* Assembler-Handler, der intern im Modul arbeitet. Der Handler wechselt
* vor dem Aufruf der Zeichenroutine in den Usermodus (Das AES luft zu
* diesem Zeitpunkt im Supervisor), so da die Routine keinerlei Probleme
* haben sollte, und nach der Rckkehr aus DrawProc automatisch wieder in
* den Supervisormodus. In der Routine knnen alle Register mit den bekannten
* Einschrnkungen des MM2 verwendet werden.
*
* Fr TDI, SPC und LPR:
* Bis auf weiteres ist es leider nicht mglich, richtige PROGDEF-Objekte zu
* benutzen. Ein Dialog, der PROGDEFs benutzt, mu mit mtDials.DialDraw
* gezeichnet werden, um in den Genuss der PROGDEFs zu kommen!
*)
PROCEDURE InstUserdef (tree: ADDRESS; objc: sINTEGER;
proc: DrawProc; private: ADDRESS): BOOLEAN;
(* Installiert ein Userdef-Objekt. FALSE wenn fehlgeschlagen (bereits instal-
* liert, oder kein Speicher mehr fr die Struktur).
*
* tree = Objektbaum
* objc = Nummer des Objekts, fr das proc installiert wird
* proc = Zeichenprozedur.
* private = ein optionaler Parameter, z.B. ein Zeiger auf eigene Daten
*
* Der obSpec eines solchen Objekts wird ein Zeiger auf eine USERBLK-
* Struktur. Modulintern ist diese AES-Struktur erweitert:
*
* TYPE PtrUSERBLK = POINTER TO USERBLK;
* USERBLK = RECORD
* ubCode: PROC; (* Handle-Prozedur *)
* ubPara: ADDRESS; (* der originale obSpec *)
* obType: sINTEGER; (* der originale obType *)
* draw: DrawProc; (* die eigentliche Zeichenprozedur *)
* END;
*
* In ubPara wird der ursprngliche obSpec (siehe MagicAES.Objcspec) abgelegt,
* damit diese Daten nicht verlorengehen.
*)
PROCEDURE FreeUserdef (tree: ADDRESS; objc: sINTEGER);
(* Gibt ein Userdef-Objekt wieder frei, dabei werden obSpec und obType
* restauriert.
*)
PROCEDURE GetObtype (tree: ADDRESS; objc: sINTEGER): sINTEGER;
(* Liefert den obType eines Objekts. Erkennt, ob es sich um ein Userdef
* handelt und liefert - falls es mit diesem Modul installiert wurde -
* den originalen obType (der obType aus MagicAES.OBJECT wird ja mit
* MagicAES.GPROGDEF berschrieben!)
*)
PROCEDURE GetObSpec (tree: ADDRESS; objc: sINTEGER): ADDRESS;
(* Liefert den obSpec eines Objekts. Erkennt, ob es sich um ein Userdef
* handelt und liefert - falls es mit diesem Modul installiert wurde -
* den originalen obSpec (der obSpec aus MagicAES.OBJECT wird ja mit
* MagicAES.USERBLK berschrieben!)
*)
PROCEDURE GetPrivate (tree: ADDRESS; objc: sINTEGER): ADDRESS;
(* Liefert den bei USERDEFs, die ber dieses Modul installiert wurden den
* 'private'-Parameter, oder NIL, falls kein USERDEF.
*)
PROCEDURE InitMtXobjects();
(* Initialisiert die mtXobjects. Wird normalerweise im Modulkrper
* aufgerufen, und braucht nicht weiter beachtet zu werden.
*)
END mtXobjects.